= Introduction  =

&nbsp; 每一个项目的说明有一定入口,如果复杂项目, 

= 流程  =

当你满足一下任意一种情况时: &nbsp; 

#当你创建了一个新的项目或者Gem, 
#凡是增加了新的publish入口的功能 (publish待定义)http://martinfowler.com/ieeeSoftware/published.pdf

<br> 

做: 

&nbsp; 请添加对入口的说明, 

<br> 

当你满足一下任意一种情况时: <br> 

&nbsp;1.添加类/module等代码,封装Boundary代码，让别人调用 

&nbsp;2.不适合写在Readme里头 

<br> 

做: 

&nbsp; 请添加对你这个调用的一些rdoc说明 

<br> 

= 入口添加说明  =

1.添加对于入口接口定义调用的short description 或者调用说明,<br>对于增加的publish接口调用说明, 

请增加3部分内容 

#添加菜单(参照Template的FsCALL部分) 
#添加简单说明（short description) 
#添加Usage

但是如果你只对1-2个publish interface进行说明,section也可不写。 

<br> 

= Template  =

README.md: 
<pre># Introduction

# FsCAll
  [Description and Usage...]
## Usage:
```
  [Usage...]
```
# FsChannel
  ...
</pre> 
<br> 

<br> 参考大部分Ruby Gem Project的说明, 

https://github.com/ernie/ransack<br>https://github.com/mislav/will_paginate 

需要加上对 

主要一些publish接口的说明(最好有简单例子), 

（目前由于人力不够,可以不写test,否则一个一般性 

项目最好还有test) 

<br> 

= Rdoc添加说明  =

1.在方法之前添加简单描述 

2.如果传入参数或者返回值有歧义，请添加简要说明或 

Example防止别人误用: 

== <span style="line-height: 1.5em;">如:(复杂度1)</span>  ==

#Validates whether the value of the specified attributes are unique across the system.<br> # Useful for making sure that only one user<br> # can be named "davidhh".<br> #<br> # class Person &lt; ActiveRecord::Base<br> # validates_uniqueness_of&nbsp;:user_name<br> # end<br> #<br> # It can also validate whether the value of the specified attributes are unique based on a scope parameter:<br> #<br> # class Person &lt; ActiveRecord::Base<br> # validates_uniqueness_of&nbsp;:user_name,&nbsp;:scope =&gt;&nbsp;:account_id<br> # end <br> #<br> # Or even multiple scope parameters. For example, making sure that a teacher can only be on the schedule once<br> # per semester for a particular class.<br> #<br> # class TeacherSchedule &lt; ActiveRecord::Base<br> # validates_uniqueness_of&nbsp;:teacher_id,&nbsp;:scope =&gt; [:semester_id,&nbsp;:class_id]<br> # end<br> #<br> # When the record is created, a check is performed to make sure that no record exists in the database<br> # with the given value for the specified attribute (that maps to a column). When the record is updated,<br> # the same check is made but disregarding the record itself.<br> #<br> # Configuration options:<br> # * &lt;tt&gt;:message&lt;/tt&gt; - Specifies a custom error message (default is: "has already been taken").<br> # * &lt;tt&gt;:scope&lt;/tt&gt; - One or more columns by which to limit the scope of the uniqueness constraint.<br> # * &lt;tt&gt;:case_sensitive&lt;/tt&gt; - Looks for an exact match. Ignored by non-text columns (+true+ by default).<br> # * &lt;tt&gt;:allow_nil&lt;/tt&gt; - If set to true, skips this validation if the attribute is +nil+ (default is +false+).<br> # * &lt;tt&gt;:allow_blank&lt;/tt&gt; - If set to true, skips this validation if the attribute is blank (default is +false+).<br> # * &lt;tt&gt;:if&lt;/tt&gt; - Specifies a method, proc or string to call to determine if the validation should<br> # occur (e.g. &lt;tt&gt;:if =&gt;&nbsp;:allow_validation&lt;/tt&gt;, or &lt;tt&gt;:if =&gt; Proc.new { |user| user.signup_step &gt; 2 }&lt;/tt&gt;).<br> # The method, proc or string should return or evaluate to a true or false value.<br> # * &lt;tt&gt;:unless&lt;/tt&gt; - Specifies a method, proc or string to call to determine if the validation should<br> # not occur (e.g. &lt;tt&gt;:unless =&gt;&nbsp;:skip_validation&lt;/tt&gt;, or<br> # &lt;tt&gt;:unless =&gt; Proc.new { |user| user.signup_step &lt;= 2 }&lt;/tt&gt;). The method, proc or string should<br> # return or evaluate to a true or false value.<br> #<br> # === Concurrency and integrity<br> #<br> # Using this validation method in conjunction with ActiveRecord::Base#save<br> # does not guarantee the absence of duplicate record insertions, because<br> # uniqueness checks on the application level are inherently prone to race<br> # conditions. For example, suppose that two users try to post a Comment at<br> # the same time, and a Comment's title must be unique. At the database-level,<br> # the actions performed by these users could be interleaved in the following manner:<br> #<br> # User 1 | User 2<br> # ------------------------------------+--------------------------------------<br> # # User 1 checks whether there's |<br> # # already a comment with the title |<br> # # 'My Post'. This is not the case. |<br> # SELECT * FROM comments |<br> # WHERE title = 'My Post' |<br> # |<br> # | # User 2 does the same thing and also<br> # | # infers that his title is unique.<br> # | SELECT * FROM comments<br> # | WHERE title = 'My Post'<br> # |<br> # # User 1 inserts his comment. |<br> # INSERT INTO comments |<br> # (title, content) VALUES |<br> # ('My Post', 'hi!') |<br> # |<br> # | # User 2 does the same thing.<br> # | INSERT INTO comments<br> # | (title, content) VALUES<br> # | ('My Post', 'hello!')<br> # |<br> # | # ^^^^^^<br> # | # Boom! We now have a duplicate<br> # | # title!<br> #<br> # This could even happen if you use transactions with the 'serializable'<br> # isolation level. The best way to work around this problem is to add a unique<br> # index to the database table using<br> # ActiveRecord::ConnectionAdapters::SchemaStatements#add_index. In the<br> # rare case that a race condition occurs, the database will guarantee<br> # the field's uniqueness.<br> #<br> # When the database catches such a duplicate insertion,<br> # ActiveRecord::Base#save will raise an ActiveRecord::StatementInvalid<br> # exception. You can either choose to let this error propagate (which<br> # will result in the default Rails exception page being shown), or you<br> # can catch it and restart the transaction (e.g. by telling the user<br> # that the title already exists, and asking him to re-enter the title).<br> # This technique is also known as optimistic concurrency control:<br> # http://en.wikipedia.org/wiki/Optimistic_concurrency_control<br> #<br> # The bundled ActiveRecord::ConnectionAdapters distinguish unique index<br> # constraint errors from other types of database errors by throwing an<br> # ActiveRecord::RecordNotUnique exception.<br> # For other adapters you will have to parse the (database-specific) exception<br> # message to detect such a case.<br> # The following bundled adapters throw the ActiveRecord::RecordNotUnique exception:<br> # * ActiveRecord::ConnectionAdapters::MysqlAdapter<br> # * ActiveRecord::ConnectionAdapters::Mysql2Adapter<br> # * ActiveRecord::ConnectionAdapters::SQLiteAdapter<br> # * ActiveRecord::ConnectionAdapters::SQLite3Adapter<br> # * ActiveRecord::ConnectionAdapters::PostgreSQLAdapter<br> #<br> def validates_uniqueness_of_across(*attr_names)<br> validates_with UniquenessAcrossValidator, _merge_attributes(attr_names)<br> end

<br> 

== 如(复杂度2)  ==

#Returns all rails groups for loading based on:<br>#<br># * The Rails environment;<br># * The environment variable RAILS_GROUPS;<br># * The optional envs given as argument and the hash with group dependencies;<br>#<br># == Examples<br>#<br># groups&nbsp;:assets =&gt; [:development,&nbsp;:test]<br>#<br># # Returns<br># # =&gt; [:default,&nbsp;:development,&nbsp;:assets] for Rails.env == "development"<br># # =&gt; [:default,&nbsp;:production] for Rails.env == "production"<br>#<br>def groups(*groups)<br>...

<br> 

== 如(复杂度3)  ==

Returns the kind of the validator. Examples:<br> #<br> # PresenceValidator.kind # =&gt;&nbsp;:presence<br> # UniquenessValidator.kind # =&gt;&nbsp;:uniqueness<br> #<br> def self.kind<br> @kind ||= name.split('::').last.underscore.sub(/_validator$/, '').to_sym unless anonymous?<br> end<br>'' 

== 如(复杂度3)  ==

#Prints all annotations with tag +tag+ under the root directories +app+, +config+, +lib+,<br> # +script+, and +test+ (recursively). Only filenames with extension <br> # +.builder+, +.rb+, and +.erb+ are taken into account. The +options+<br> # hash is passed to each annotation's +to_s+.<br> #<br> # This class method is the single entry point for the rake tasks.<br> def self.enumerate(tag, options={})<br> extractor = new(tag)<br> extractor.display(extractor.find, options)<br> end

<br> 

== 如(复杂度4)  ==

#The Configuration instance used to configure the Rails environment<br> def configuration<br> application.config<br> end<br>

<br> 

请根据你method的对应复杂度进行必要的documentation. 

&nbsp; 

&nbsp;&nbsp;

<br> 

<br> 

<br> 

<br> 

<br> 

<br>